type token =
  | T_INT of (
# 6 "lib/parser.mly"
        int
# 6 "lib/parser.ml"
)
  | T_ID of (
# 7 "lib/parser.mly"
        string
# 11 "lib/parser.ml"
)
  | T_TY of (
# 8 "lib/parser.mly"
        Ast.ty
# 16 "lib/parser.ml"
)
  | T_UNARY of (
# 9 "lib/parser.mly"
        Ast.unary_op
# 21 "lib/parser.ml"
)
  | T_ADD
  | T_SUB
  | T_MUL
  | T_DIV
  | T_MOD
  | T_LT
  | T_GT
  | T_LE
  | T_GE
  | T_EQ
  | T_NE
  | T_AND
  | T_OR
  | T_LPAREN
  | T_RPAREN
  | T_LBRACE
  | T_RBRACE
  | T_SEMI
  | T_COMMA
  | T_ASSIGN
  | T_IF
  | T_ELSE
  | T_WHILE
  | T_BREAK
  | T_CONTINUE
  | T_RETURN
  | T_EOF

open Parsing
let _ = parse_error;;
# 2 "lib/parser.mly"
open Ast
# 55 "lib/parser.ml"
let yytransl_const = [|
  261 (* T_ADD *);
  262 (* T_SUB *);
  263 (* T_MUL *);
  264 (* T_DIV *);
  265 (* T_MOD *);
  266 (* T_LT *);
  267 (* T_GT *);
  268 (* T_LE *);
  269 (* T_GE *);
  270 (* T_EQ *);
  271 (* T_NE *);
  272 (* T_AND *);
  273 (* T_OR *);
  274 (* T_LPAREN *);
  275 (* T_RPAREN *);
  276 (* T_LBRACE *);
  277 (* T_RBRACE *);
  278 (* T_SEMI *);
  279 (* T_COMMA *);
  280 (* T_ASSIGN *);
  281 (* T_IF *);
  282 (* T_ELSE *);
  283 (* T_WHILE *);
  284 (* T_BREAK *);
  285 (* T_CONTINUE *);
  286 (* T_RETURN *);
  287 (* T_EOF *);
    0|]

let yytransl_block = [|
  257 (* T_INT *);
  258 (* T_ID *);
  259 (* T_TY *);
  260 (* T_UNARY *);
    0|]

let yylhs = "\255\255\
\001\000\002\000\002\000\003\000\004\000\004\000\006\000\006\000\
\007\000\005\000\005\000\008\000\008\000\008\000\008\000\008\000\
\008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
\009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\
\009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\
\009\000\009\000\009\000\009\000\010\000\010\000\011\000\011\000\
\000\000"

let yylen = "\002\000\
\002\000\001\000\002\000\008\000\000\000\001\000\001\000\003\000\
\002\000\000\000\002\000\001\000\002\000\003\000\005\000\004\000\
\005\000\007\000\005\000\002\000\002\000\003\000\002\000\003\000\
\001\000\001\000\003\000\002\000\002\000\002\000\003\000\003\000\
\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\003\000\004\000\000\000\001\000\001\000\003\000\
\002\000"

let yydefred = "\000\000\
\000\000\000\000\000\000\049\000\000\000\002\000\000\000\001\000\
\003\000\000\000\000\000\000\000\000\000\007\000\009\000\000\000\
\000\000\010\000\008\000\000\000\025\000\000\000\000\000\000\000\
\000\000\000\000\000\000\010\000\004\000\012\000\000\000\000\000\
\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\020\000\021\000\023\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\013\000\000\000\000\000\000\000\000\000\014\000\000\000\
\027\000\024\000\000\000\000\000\022\000\000\000\000\000\033\000\
\034\000\035\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\044\000\000\000\016\000\000\000\000\000\000\000\
\000\000\015\000\000\000\019\000\000\000\018\000"

let yydgoto = "\002\000\
\004\000\005\000\006\000\012\000\020\000\013\000\014\000\036\000\
\037\000\068\000\069\000"

let yysindex = "\021\000\
\024\255\000\000\026\255\000\000\013\255\000\000\031\255\000\000\
\000\000\054\255\058\255\047\255\050\255\000\000\000\000\052\255\
\054\255\000\000\000\000\049\255\000\000\002\255\073\255\041\255\
\041\255\041\255\041\255\000\000\000\000\000\000\080\255\084\255\
\083\255\098\255\003\255\000\000\214\255\041\255\041\255\251\254\
\085\255\150\000\150\000\150\000\049\000\079\255\041\255\041\255\
\000\000\000\000\000\000\233\255\041\255\041\255\041\255\041\255\
\041\255\041\255\041\255\041\255\041\255\041\255\041\255\041\255\
\041\255\000\000\150\000\104\255\105\255\251\255\000\000\041\255\
\000\000\000\000\064\000\079\000\000\000\056\255\056\255\000\000\
\000\000\000\000\192\000\192\000\192\000\192\000\175\000\175\000\
\081\255\163\000\000\000\041\255\000\000\013\000\139\255\139\255\
\150\000\000\000\106\255\000\000\139\255\000\000"

let yyrindex = "\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\114\255\000\000\000\000\116\255\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\031\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\131\255\000\000\000\000\
\165\255\183\000\185\000\190\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\243\254\000\000\133\255\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\180\255\195\255\000\000\
\000\000\000\000\089\000\103\000\117\000\131\000\102\255\132\255\
\173\000\039\255\000\000\000\000\000\000\000\000\000\000\000\000\
\103\255\000\000\109\255\000\000\000\000\000\000"

let yygindex = "\000\000\
\000\000\000\000\148\000\000\000\128\000\000\000\141\000\173\255\
\232\255\000\000\000\000"

let yytablesize = 469
let yytable = "\042\000\
\043\000\044\000\045\000\021\000\041\000\047\000\024\000\025\000\
\026\000\047\000\052\000\099\000\100\000\067\000\070\000\003\000\
\071\000\102\000\072\000\038\000\027\000\001\000\075\000\076\000\
\051\000\039\000\003\000\007\000\078\000\079\000\080\000\081\000\
\082\000\083\000\084\000\085\000\086\000\087\000\088\000\089\000\
\090\000\021\000\041\000\008\000\024\000\025\000\026\000\094\000\
\010\000\021\000\022\000\023\000\024\000\025\000\026\000\043\000\
\011\000\043\000\027\000\015\000\043\000\043\000\055\000\056\000\
\057\000\016\000\027\000\097\000\028\000\029\000\030\000\018\000\
\017\000\031\000\040\000\032\000\033\000\034\000\035\000\021\000\
\022\000\023\000\024\000\025\000\026\000\053\000\054\000\055\000\
\056\000\057\000\058\000\059\000\060\000\061\000\062\000\063\000\
\027\000\047\000\028\000\074\000\030\000\048\000\038\000\031\000\
\049\000\032\000\033\000\034\000\035\000\017\000\017\000\017\000\
\017\000\017\000\017\000\040\000\040\000\040\000\040\000\050\000\
\040\000\048\000\091\000\040\000\040\000\048\000\017\000\092\000\
\017\000\017\000\017\000\101\000\005\000\017\000\006\000\017\000\
\017\000\017\000\017\000\021\000\022\000\023\000\024\000\025\000\
\026\000\041\000\041\000\041\000\041\000\045\000\041\000\046\000\
\009\000\041\000\041\000\046\000\027\000\019\000\028\000\000\000\
\030\000\000\000\000\000\031\000\000\000\032\000\033\000\034\000\
\035\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
\026\000\026\000\026\000\026\000\026\000\026\000\000\000\026\000\
\031\000\031\000\026\000\026\000\000\000\031\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\000\000\031\000\032\000\
\032\000\031\000\031\000\000\000\032\000\032\000\032\000\032\000\
\032\000\032\000\032\000\032\000\000\000\032\000\000\000\000\000\
\032\000\032\000\053\000\054\000\055\000\056\000\057\000\058\000\
\059\000\060\000\061\000\062\000\063\000\064\000\065\000\000\000\
\000\000\000\000\000\000\066\000\000\000\053\000\054\000\055\000\
\056\000\057\000\058\000\059\000\060\000\061\000\062\000\063\000\
\064\000\065\000\000\000\000\000\000\000\000\000\077\000\053\000\
\054\000\055\000\056\000\057\000\058\000\059\000\060\000\061\000\
\062\000\063\000\064\000\065\000\000\000\000\000\000\000\000\000\
\093\000\053\000\054\000\055\000\056\000\057\000\058\000\059\000\
\060\000\061\000\062\000\063\000\064\000\065\000\000\000\000\000\
\000\000\000\000\098\000\026\000\026\000\026\000\026\000\026\000\
\026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
\000\000\000\000\000\000\000\000\026\000\053\000\054\000\055\000\
\056\000\057\000\058\000\059\000\060\000\061\000\062\000\063\000\
\064\000\065\000\000\000\073\000\053\000\054\000\055\000\056\000\
\057\000\058\000\059\000\060\000\061\000\062\000\063\000\064\000\
\065\000\000\000\095\000\053\000\054\000\055\000\056\000\057\000\
\058\000\059\000\060\000\061\000\062\000\063\000\064\000\065\000\
\000\000\096\000\036\000\036\000\036\000\036\000\036\000\036\000\
\036\000\036\000\000\000\036\000\000\000\000\000\036\000\036\000\
\037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
\000\000\037\000\000\000\000\000\037\000\037\000\038\000\038\000\
\038\000\038\000\038\000\038\000\038\000\038\000\000\000\038\000\
\000\000\000\000\038\000\038\000\039\000\039\000\039\000\039\000\
\039\000\039\000\039\000\039\000\000\000\039\000\000\000\000\000\
\039\000\039\000\053\000\054\000\055\000\056\000\057\000\058\000\
\059\000\060\000\061\000\062\000\063\000\064\000\065\000\053\000\
\054\000\055\000\056\000\057\000\058\000\059\000\060\000\061\000\
\062\000\063\000\064\000\053\000\054\000\055\000\056\000\057\000\
\058\000\059\000\060\000\061\000\042\000\042\000\000\000\042\000\
\000\000\000\000\042\000\042\000\053\000\054\000\055\000\056\000\
\057\000\030\000\000\000\028\000\030\000\030\000\028\000\028\000\
\029\000\000\000\000\000\029\000\029\000"

let yycheck = "\024\000\
\025\000\026\000\027\000\001\001\002\001\019\001\004\001\005\001\
\006\001\023\001\035\000\095\000\096\000\038\000\039\000\003\001\
\022\001\101\000\024\001\018\001\018\001\001\000\047\000\048\000\
\022\001\024\001\003\001\002\001\053\000\054\000\055\000\056\000\
\057\000\058\000\059\000\060\000\061\000\062\000\063\000\064\000\
\065\000\001\001\002\001\031\001\004\001\005\001\006\001\072\000\
\018\001\001\001\002\001\003\001\004\001\005\001\006\001\017\001\
\003\001\019\001\018\001\002\001\022\001\023\001\007\001\008\001\
\009\001\019\001\018\001\092\000\020\001\021\001\022\001\020\001\
\023\001\025\001\002\001\027\001\028\001\029\001\030\001\001\001\
\002\001\003\001\004\001\005\001\006\001\005\001\006\001\007\001\
\008\001\009\001\010\001\011\001\012\001\013\001\014\001\015\001\
\018\001\018\001\020\001\021\001\022\001\018\001\018\001\025\001\
\022\001\027\001\028\001\029\001\030\001\001\001\002\001\003\001\
\004\001\005\001\006\001\014\001\015\001\016\001\017\001\022\001\
\019\001\019\001\019\001\022\001\023\001\023\001\018\001\023\001\
\020\001\021\001\022\001\026\001\019\001\025\001\019\001\027\001\
\028\001\029\001\030\001\001\001\002\001\003\001\004\001\005\001\
\006\001\014\001\015\001\016\001\017\001\019\001\019\001\019\001\
\005\000\022\001\023\001\028\000\018\001\017\000\020\001\255\255\
\022\001\255\255\255\255\025\001\255\255\027\001\028\001\029\001\
\030\001\005\001\006\001\007\001\008\001\009\001\010\001\011\001\
\012\001\013\001\014\001\015\001\016\001\017\001\255\255\019\001\
\005\001\006\001\022\001\023\001\255\255\010\001\011\001\012\001\
\013\001\014\001\015\001\016\001\017\001\255\255\019\001\005\001\
\006\001\022\001\023\001\255\255\010\001\011\001\012\001\013\001\
\014\001\015\001\016\001\017\001\255\255\019\001\255\255\255\255\
\022\001\023\001\005\001\006\001\007\001\008\001\009\001\010\001\
\011\001\012\001\013\001\014\001\015\001\016\001\017\001\255\255\
\255\255\255\255\255\255\022\001\255\255\005\001\006\001\007\001\
\008\001\009\001\010\001\011\001\012\001\013\001\014\001\015\001\
\016\001\017\001\255\255\255\255\255\255\255\255\022\001\005\001\
\006\001\007\001\008\001\009\001\010\001\011\001\012\001\013\001\
\014\001\015\001\016\001\017\001\255\255\255\255\255\255\255\255\
\022\001\005\001\006\001\007\001\008\001\009\001\010\001\011\001\
\012\001\013\001\014\001\015\001\016\001\017\001\255\255\255\255\
\255\255\255\255\022\001\005\001\006\001\007\001\008\001\009\001\
\010\001\011\001\012\001\013\001\014\001\015\001\016\001\017\001\
\255\255\255\255\255\255\255\255\022\001\005\001\006\001\007\001\
\008\001\009\001\010\001\011\001\012\001\013\001\014\001\015\001\
\016\001\017\001\255\255\019\001\005\001\006\001\007\001\008\001\
\009\001\010\001\011\001\012\001\013\001\014\001\015\001\016\001\
\017\001\255\255\019\001\005\001\006\001\007\001\008\001\009\001\
\010\001\011\001\012\001\013\001\014\001\015\001\016\001\017\001\
\255\255\019\001\010\001\011\001\012\001\013\001\014\001\015\001\
\016\001\017\001\255\255\019\001\255\255\255\255\022\001\023\001\
\010\001\011\001\012\001\013\001\014\001\015\001\016\001\017\001\
\255\255\019\001\255\255\255\255\022\001\023\001\010\001\011\001\
\012\001\013\001\014\001\015\001\016\001\017\001\255\255\019\001\
\255\255\255\255\022\001\023\001\010\001\011\001\012\001\013\001\
\014\001\015\001\016\001\017\001\255\255\019\001\255\255\255\255\
\022\001\023\001\005\001\006\001\007\001\008\001\009\001\010\001\
\011\001\012\001\013\001\014\001\015\001\016\001\017\001\005\001\
\006\001\007\001\008\001\009\001\010\001\011\001\012\001\013\001\
\014\001\015\001\016\001\005\001\006\001\007\001\008\001\009\001\
\010\001\011\001\012\001\013\001\016\001\017\001\255\255\019\001\
\255\255\255\255\022\001\023\001\005\001\006\001\007\001\008\001\
\009\001\019\001\255\255\019\001\022\001\023\001\022\001\023\001\
\019\001\255\255\255\255\022\001\023\001"

let yynames_const = "\
  T_ADD\000\
  T_SUB\000\
  T_MUL\000\
  T_DIV\000\
  T_MOD\000\
  T_LT\000\
  T_GT\000\
  T_LE\000\
  T_GE\000\
  T_EQ\000\
  T_NE\000\
  T_AND\000\
  T_OR\000\
  T_LPAREN\000\
  T_RPAREN\000\
  T_LBRACE\000\
  T_RBRACE\000\
  T_SEMI\000\
  T_COMMA\000\
  T_ASSIGN\000\
  T_IF\000\
  T_ELSE\000\
  T_WHILE\000\
  T_BREAK\000\
  T_CONTINUE\000\
  T_RETURN\000\
  T_EOF\000\
  "

let yynames_block = "\
  T_INT\000\
  T_ID\000\
  T_TY\000\
  T_UNARY\000\
  "

let yyact = [|
  (fun _ -> failwith "parser")
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'func_def_list) in
    Obj.repr(
# 36 "lib/parser.mly"
                        ( _1 )
# 331 "lib/parser.ml"
               : Ast.program))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'func_def) in
    Obj.repr(
# 39 "lib/parser.mly"
             ( [_1] )
# 338 "lib/parser.ml"
               : 'func_def_list))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'func_def_list) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'func_def) in
    Obj.repr(
# 40 "lib/parser.mly"
                           ( _1 @ [_2] )
# 346 "lib/parser.ml"
               : 'func_def_list))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 7 : Ast.ty) in
    let _2 = (Parsing.peek_val __caml_parser_env 6 : string) in
    let _4 = (Parsing.peek_val __caml_parser_env 4 : 'params) in
    let _7 = (Parsing.peek_val __caml_parser_env 1 : 'stmt_list) in
    Obj.repr(
# 44 "lib/parser.mly"
    ( { ret_ty = _1; name = _2; params = _4; body = Block(_7) } )
# 356 "lib/parser.ml"
               : 'func_def))
; (fun __caml_parser_env ->
    Obj.repr(
# 47 "lib/parser.mly"
    ( [] )
# 362 "lib/parser.ml"
               : 'params))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'param_list) in
    Obj.repr(
# 48 "lib/parser.mly"
               ( _1 )
# 369 "lib/parser.ml"
               : 'params))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'param) in
    Obj.repr(
# 51 "lib/parser.mly"
          ( [_1] )
# 376 "lib/parser.ml"
               : 'param_list))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'param_list) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'param) in
    Obj.repr(
# 52 "lib/parser.mly"
                             ( _1 @ [_3] )
# 384 "lib/parser.ml"
               : 'param_list))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : Ast.ty) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 55 "lib/parser.mly"
              ( { pty = _1; pid = _2 } )
# 392 "lib/parser.ml"
               : 'param))
; (fun __caml_parser_env ->
    Obj.repr(
# 58 "lib/parser.mly"
    ( [] )
# 398 "lib/parser.ml"
               : 'stmt_list))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'stmt_list) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'stmt) in
    Obj.repr(
# 59 "lib/parser.mly"
                   ( _1 @ [_2] )
# 406 "lib/parser.ml"
               : 'stmt_list))
; (fun __caml_parser_env ->
    Obj.repr(
# 62 "lib/parser.mly"
           ( Empty )
# 412 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in
    Obj.repr(
# 63 "lib/parser.mly"
                ( ExprStmt _1 )
# 419 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : Ast.ty) in
    let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in
    Obj.repr(
# 64 "lib/parser.mly"
                     ( Declare(_2, Num(0)) )
# 427 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 4 : Ast.ty) in
    let _2 = (Parsing.peek_val __caml_parser_env 3 : string) in
    let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in
    Obj.repr(
# 65 "lib/parser.mly"
                                   ( Declare(_2, _4) )
# 436 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in
    Obj.repr(
# 66 "lib/parser.mly"
                              ( Assign(_1, _3) )
# 444 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _5 = (Parsing.peek_val __caml_parser_env 0 : 'stmt) in
    Obj.repr(
# 67 "lib/parser.mly"
                                      ( If(_3, _5, None) )
# 452 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 4 : 'expr) in
    let _5 = (Parsing.peek_val __caml_parser_env 2 : 'stmt) in
    let _7 = (Parsing.peek_val __caml_parser_env 0 : 'stmt) in
    Obj.repr(
# 68 "lib/parser.mly"
                                                 ( If(_3, _5, Some _7) )
# 461 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _5 = (Parsing.peek_val __caml_parser_env 0 : 'stmt) in
    Obj.repr(
# 69 "lib/parser.mly"
                                        ( While(_3, _5) )
# 469 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    Obj.repr(
# 70 "lib/parser.mly"
                   ( Break )
# 475 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    Obj.repr(
# 71 "lib/parser.mly"
                      ( Continue )
# 481 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in
    Obj.repr(
# 72 "lib/parser.mly"
                         ( Return(Some _2) )
# 488 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    Obj.repr(
# 73 "lib/parser.mly"
                    ( Return None )
# 494 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : 'stmt_list) in
    Obj.repr(
# 74 "lib/parser.mly"
                                ( Block _2 )
# 501 "lib/parser.ml"
               : 'stmt))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : int) in
    Obj.repr(
# 77 "lib/parser.mly"
          ( Num _1 )
# 508 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 78 "lib/parser.mly"
         ( ID _1 )
# 515 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in
    Obj.repr(
# 79 "lib/parser.mly"
                           ( Paren _2 )
# 522 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 80 "lib/parser.mly"
                             ( Unary(UPlus, _2) )
# 529 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 81 "lib/parser.mly"
                             ( Unary(UMinus, _2) )
# 536 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : Ast.unary_op) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 82 "lib/parser.mly"
                               ( Unary(_1, _2) )
# 544 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 83 "lib/parser.mly"
                    ( Binary(Add, _1, _3) )
# 552 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 84 "lib/parser.mly"
                    ( Binary(Sub, _1, _3) )
# 560 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 85 "lib/parser.mly"
                    ( Binary(Mul, _1, _3) )
# 568 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 86 "lib/parser.mly"
                    ( Binary(Div, _1, _3) )
# 576 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 87 "lib/parser.mly"
                    ( Binary(Mod, _1, _3) )
# 584 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 88 "lib/parser.mly"
                   ( Binary(LT, _1, _3) )
# 592 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 89 "lib/parser.mly"
                   ( Binary(GT, _1, _3) )
# 600 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 90 "lib/parser.mly"
                   ( Binary(LE, _1, _3) )
# 608 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 91 "lib/parser.mly"
                   ( Binary(GE, _1, _3) )
# 616 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 92 "lib/parser.mly"
                   ( Binary(EQ, _1, _3) )
# 624 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 93 "lib/parser.mly"
                   ( Binary(NE, _1, _3) )
# 632 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 94 "lib/parser.mly"
                    ( Binary(And, _1, _3) )
# 640 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 95 "lib/parser.mly"
                   ( Binary(Or, _1, _3) )
# 648 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : 'args) in
    Obj.repr(
# 96 "lib/parser.mly"
                                ( Call(_1, _3) )
# 656 "lib/parser.ml"
               : 'expr))
; (fun __caml_parser_env ->
    Obj.repr(
# 99 "lib/parser.mly"
    ( [] )
# 662 "lib/parser.ml"
               : 'args))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr_list) in
    Obj.repr(
# 100 "lib/parser.mly"
              ( _1 )
# 669 "lib/parser.ml"
               : 'args))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 103 "lib/parser.mly"
         ( [_1] )
# 676 "lib/parser.ml"
               : 'expr_list))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr_list) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
    Obj.repr(
# 104 "lib/parser.mly"
                           ( _1 @ [_3] )
# 684 "lib/parser.ml"
               : 'expr_list))
(* Entry program *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
|]
let yytables =
  { Parsing.actions=yyact;
    Parsing.transl_const=yytransl_const;
    Parsing.transl_block=yytransl_block;
    Parsing.lhs=yylhs;
    Parsing.len=yylen;
    Parsing.defred=yydefred;
    Parsing.dgoto=yydgoto;
    Parsing.sindex=yysindex;
    Parsing.rindex=yyrindex;
    Parsing.gindex=yygindex;
    Parsing.tablesize=yytablesize;
    Parsing.table=yytable;
    Parsing.check=yycheck;
    Parsing.error_function=parse_error;
    Parsing.names_const=yynames_const;
    Parsing.names_block=yynames_block }
let program (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 1 lexfun lexbuf : Ast.program)
